package org.jeecg.exam;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;

public class Demo {

    public static void main(String[] args) {
        // Endpoint以华东1（杭州）为例，其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-beijing.aliyuncs.com";
        // 这里替换为你的AccessKeyId和AccessKeySecret。
        String accessKeyId = "LTAI5tFmjrG5DcYZF9sZ2HdQ";
        String accessKeySecret = "QG8NHSCMdEMIhBdSm8caK5HPbhK6fa";
        // 填写Bucket名称，例如examplebucket。
        String bucketName = "shicao2";
        // 指定要扫描的本地目录路径，例如D:\\localpath\\exampledir。
        String directoryPath = "C:\\Users\\qing he\\Desktop\\12";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        try {
            // 调用递归方法，扫描并上传目录下的所有文件和文件夹。
            uploadDirectory(ossClient, bucketName, "", new File(directoryPath));
        } catch (OSSException oe) {
            System.out.println("捕获到OSSException，这意味着您的请求到达了OSS，但由于某种原因被拒绝。");
            System.out.println("错误信息: " + oe.getErrorMessage());
            System.out.println("错误代码: " + oe.getErrorCode());
            System.out.println("请求ID: " + oe.getRequestId());
            System.out.println("主机ID: " + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("捕获到ClientException，这意味着客户端在试图与OSS通信时遇到了严重的内部问题，例如无法访问网络。");
            System.out.println("错误信息: " + ce.getMessage());
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
    /**
     * 递归上传目录下的所有文件和子目录。
     */
    public static void  uploadDirectory(OSS ossClinet,String bucketName,String prefix,File directoty) throws IOException {
        //如果文件存在切不是目录
        if (directoty.exists()&& directoty.isDirectory()){
            File[] files=directoty.listFiles();
            BasicFileAttributes fileAttributes=null;
            if (files!=null){
                for (File file : files) {
                    if (file.isFile()){
                        fileAttributes=Files.readAttributes(file.toPath(),BasicFileAttributes.class);
                        String name=prefix+file.getName();
                        PutObjectRequest putObjectRequest=new PutObjectRequest(bucketName,name,file);
                        PutObjectResult result=ossClinet.putObject(putObjectRequest);
                        System.out.println("上传文件成功");
                    }else if (file.isDirectory()){
                        //如果是文件夹继续地柜上传文件
                        String newPrefix=prefix+file.getName()+"./";
                        uploadDirectory(ossClinet,bucketName,newPrefix,file);
                    }
                }
            }
        }else {
            System.out.println("指定的路径不是目录或不存在。");
        }
    }

}   